{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73bd968b-d970-4a05-94ef-4e7abf990827",
   "metadata": {},
   "source": [
    "Chapter 25\n",
    "\n",
    "# 状态向量转换\n",
    "Book_3《数学要素》 | 鸢尾花书：从加减乘除到机器学习 (第二版)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0417b2a5-086b-40d6-a0bd-6dc28f15b779",
   "metadata": {},
   "source": [
    "这段代码旨在通过可视化展示马尔可夫链中的转移矩阵及其作用于状态向量的结果。首先，定义了一个转移矩阵$T$，其形式为：\n",
    "\n",
    "$$\n",
    "T = \\begin{pmatrix}\n",
    "0.7 & 0.2 \\\\\n",
    "0.3 & 0.8\n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "该矩阵表示系统状态之间的转移概率。例如，$T_{11} = 0.7$表示从状态1转移到状态1的概率，而$T_{12} = 0.2$则表示从状态1转移到状态2的概率。\n",
    "\n",
    "接着，代码定义了初始状态向量$\\pi_i$，其形式为：\n",
    "\n",
    "$$\n",
    "\\pi_i = \\begin{pmatrix}\n",
    "0.6 \\\\\n",
    "0.4\n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "这是在系统状态1和状态2下的初始概率分布，表示在时间点$i$时系统处于状态1的概率为0.6，而处于状态2的概率为0.4。\n",
    "\n",
    "通过矩阵乘法$T \\cdot \\pi_i$，计算得到了下一个状态向量$\\pi_{i+1}$，公式为：\n",
    "\n",
    "$$\n",
    "\\pi_{i+1} = T \\cdot \\pi_i\n",
    "$$\n",
    "\n",
    "这个过程展示了马尔可夫链的一个关键特性，即通过转移矩阵可以预测未来的状态分布。\n",
    "\n",
    "在可视化方面，代码生成了两个图。第一个图显示了转移矩阵$T$、当前状态向量$\\pi_i$和下一个状态向量$\\pi_{i+1}$，用热图形式表现了它们的数值。第二个图则展示了经过两次转移后的状态向量$\\pi_{i+2}$，通过$T^2 \\cdot \\pi_i$来计算得到：\n",
    "\n",
    "$$\n",
    "\\pi_{i+2} = T^2 \\cdot \\pi_i\n",
    "$$\n",
    "\n",
    "这样，用户可以直观地观察到不同状态向量的变化过程以及转移矩阵的作用。这种可视化方式对理解马尔可夫链的动态特性非常有效，尤其是在分析系统状态演变时。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bfc6bfb9-0071-40df-a6e4-1e5e6eb6f342",
   "metadata": {},
   "source": [
    "## 导入必要的库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f7691084-8147-4c76-b913-262aac166b6f",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np  # 导入NumPy库，用于矩阵和向量运算\n",
    "import seaborn as sns  # 导入Seaborn库，用于热图绘制\n",
    "import matplotlib.pyplot as plt  # 导入Matplotlib库，用于绘图"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "146bd48a-f4f2-4016-9055-af39a08b7a75",
   "metadata": {},
   "source": [
    "## 定义转移矩阵和初始状态向量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "e6c909aa-7c95-488c-9068-e9eab94fd5e4",
   "metadata": {},
   "outputs": [],
   "source": [
    "T = np.matrix([[0.7, 0.2],  # 定义转移矩阵T，表示从一个状态到另一个状态的转移概率\n",
    "               [0.3, 0.8]])  # 转移矩阵的每行表示一个状态"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d59bf5b9-af06-44a9-92fc-f28aacae94e9",
   "metadata": {},
   "outputs": [],
   "source": [
    "pi_i = np.matrix([[0.6],  # 定义初始状态向量pi_i，表示初始时刻各状态的概率\n",
    "                  [0.4]])  # 每个元素表示对应状态的初始概率"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1a518488-89b5-419e-a19d-7724b5ab9e1f",
   "metadata": {},
   "source": [
    "## 计算状态向量的下一步状态"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "1ca55bc0-2ce8-4c1a-bb70-e99b1685178a",
   "metadata": {},
   "outputs": [],
   "source": [
    "pi_i_1 = T @ pi_i  # 通过矩阵乘法计算下一时刻的状态向量pi_i_1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cd290485-4342-4f4c-8a13-1dd72adca104",
   "metadata": {},
   "source": [
    "## 创建图形和子图，绘制转移过程的可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3e4cf887-b9a0-4db5-bd60-f2ccc955d2cc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([0.5, 1.5]), [Text(0, 0.5, '0'), Text(0, 1.5, '1')])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x300 with 8 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(1, 5, figsize=(12, 3))  # 创建包含5个子图的画布，设置整体尺寸为12x3\n",
    "\n",
    "all_max = 1  # 设置热图的最大值为1，用于颜色映射\n",
    "all_min = 0  # 设置热图的最小值为0，用于颜色映射\n",
    "\n",
    "plt.sca(axes[0])  # 选择第一个子图\n",
    "ax = sns.heatmap(T, cmap='RdYlBu_r', vmax=all_max, vmin=all_min,  # 绘制转移矩阵的热图\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"},  # 设置颜色条的方向为水平\n",
    "                 annot=True, fmt=\".3f\")  # 在热图上标注数值，格式为小数点后三位\n",
    "ax.set_aspect(\"equal\")  # 设置坐标轴比例相等\n",
    "plt.title(r'$T$')  # 设置热图标题为转移矩阵T\n",
    "plt.yticks(rotation=0)  # 设置y轴刻度标签的旋转角度为0\n",
    "\n",
    "plt.sca(axes[1])  # 选择第二个子图\n",
    "plt.title(r'$@$')  # 设置标题为符号@\n",
    "plt.axis('off')  # 关闭坐标轴显示\n",
    "\n",
    "plt.sca(axes[2])  # 选择第三个子图\n",
    "ax = sns.heatmap(pi_i, cmap='RdYlBu_r', vmax=all_max, vmin=all_min,  # 绘制当前状态向量pi_i的热图\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"},  # 设置颜色条的方向为水平\n",
    "                 annot=True, fmt=\".3f\")  # 在热图上标注数值，格式为小数点后三位\n",
    "ax.set_aspect(\"equal\")  # 设置坐标轴比例相等\n",
    "plt.title(r'$\\pi_{i}$')  # 设置热图标题为当前状态向量pi_i\n",
    "plt.yticks(rotation=0)  # 设置y轴刻度标签的旋转角度为0\n",
    "\n",
    "plt.sca(axes[3])  # 选择第四个子图\n",
    "plt.title(r'$=$')  # 设置标题为符号=\n",
    "plt.axis('off')  # 关闭坐标轴显示\n",
    "\n",
    "plt.sca(axes[4])  # 选择第五个子图\n",
    "ax = sns.heatmap(pi_i_1, cmap='RdYlBu_r', vmax=all_max, vmin=all_min,  # 绘制下一个状态向量pi_i_1的热图\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"},  # 设置颜色条的方向为水平\n",
    "                 annot=True, fmt=\".3f\")  # 在热图上标注数值，格式为小数点后三位\n",
    "ax.set_aspect(\"equal\")  # 设置坐标轴比例相等\n",
    "plt.title(r'$\\pi_{i+1}$')  # 设置热图标题为下一状态向量pi_i_1\n",
    "plt.yticks(rotation=0)  # 设置y轴刻度标签的旋转角度为0"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d814c68-cd94-4a97-b110-14b9d65dbb00",
   "metadata": {},
   "source": [
    "## 计算状态向量的下两个状态"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "42e4392d-adca-43cd-8305-5aa0095a6ea8",
   "metadata": {},
   "outputs": [],
   "source": [
    "pi_i_2 = T @ T @ pi_i  # 通过两次矩阵乘法计算下两个时刻的状态向量pi_i_2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "afb3412a-3dde-4fd2-9574-86fc7149947f",
   "metadata": {},
   "source": [
    "## 创建图形和子图，绘制转移过程的可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "e3807531-ed3b-4e4c-acbf-e3bc9da7cf86",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([0.5, 1.5]), [Text(0, 0.5, '0'), Text(0, 1.5, '1')])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x300 with 11 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(1, 7, figsize=(12, 3))  # 创建包含7个子图的画布，设置整体尺寸为12x3\n",
    "\n",
    "plt.sca(axes[0])  # 选择第一个子图\n",
    "ax = sns.heatmap(T, cmap='RdYlBu_r', vmax=all_max, vmin=all_min,  # 绘制转移矩阵T的热图\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"},  # 设置颜色条的方向为水平\n",
    "                 annot=True, fmt=\".3f\")  # 在热图上标注数值，格式为小数点后三位\n",
    "ax.set_aspect(\"equal\")  # 设置坐标轴比例相等\n",
    "plt.title(r'$T$')  # 设置热图标题为转移矩阵T\n",
    "plt.yticks(rotation=0)  # 设置y轴刻度标签的旋转角度为0\n",
    "\n",
    "plt.sca(axes[1])  # 选择第二个子图\n",
    "plt.title(r'$@$')  # 设置标题为符号@\n",
    "plt.axis('off')  # 关闭坐标轴显示\n",
    "\n",
    "plt.sca(axes[2])  # 选择第三个子图\n",
    "ax = sns.heatmap(T, cmap='RdYlBu_r', vmax=all_max, vmin=all_min,  # 再次绘制转移矩阵T的热图\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"},  # 设置颜色条的方向为水平\n",
    "                 annot=True, fmt=\".3f\")  # 在热图上标注数值，格式为小数点后三位\n",
    "ax.set_aspect(\"equal\")  # 设置坐标轴比例相等\n",
    "plt.title(r'$T$')  # 设置热图标题为转移矩阵T\n",
    "plt.yticks(rotation=0)  # 设置y轴刻度标签的旋转角度为0\n",
    "\n",
    "plt.sca(axes[3])  # 选择第四个子图\n",
    "plt.title(r'$@$')  # 设置标题为符号@\n",
    "plt.axis('off')  # 关闭坐标轴显示\n",
    "\n",
    "plt.sca(axes[4])  # 选择第五个子图\n",
    "ax = sns.heatmap(pi_i, cmap='RdYlBu_r', vmax=all_max, vmin=all_min,  # 绘制当前状态向量pi_i的热图\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"},  # 设置颜色条的方向为水平\n",
    "                 annot=True, fmt=\".3f\")  # 在热图上标注数值，格式为小数点后三位\n",
    "ax.set_aspect(\"equal\")  # 设置坐标轴比例相等\n",
    "plt.title(r'$\\pi_{i}$')  # 设置热图标题为当前状态向量pi_i\n",
    "plt.yticks(rotation=0)  # 设置y轴刻度标签的旋转角度为0\n",
    "\n",
    "plt.sca(axes[5])  # 选择第六个子图\n",
    "plt.title(r'$=$')  # 设置标题为符号=\n",
    "plt.axis('off')  # 关闭坐标轴显示\n",
    "\n",
    "plt.sca(axes[6])  # 选择第七个子图\n",
    "ax = sns.heatmap(pi_i_2, cmap='RdYlBu_r', vmax=all_max, vmin=all_min,  # 绘制下两个状态向量pi_i_2的热图\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"},  # 设置颜色条的方向为水平\n",
    "                 annot=True, fmt=\".3f\")  # 在热图上标注数值，格式为小数点后三位\n",
    "ax.set_aspect(\"equal\")  # 设置坐标轴比例相等\n",
    "plt.title(r'$\\pi_{i+2}$')  # 设置热图标题为下两个状态向量pi_i_2\n",
    "plt.yticks(rotation=0)  # 设置y轴刻度标签的旋转角度为0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "85a80909-2aac-49ed-bb7a-f8cc6b80ee7d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ecd322f4-f919-4be2-adc3-69d28ef25e69",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
